package com.web;


import java.util.function.Function;

/**
 * 数据处理
 *
 * @author：zhang guoxiang
 * @date：2022/4/15
 */
public abstract class DataUtils {

    /**
     * 如果对象不为 null，则将 obj 作为参数调用 function；否则返回 null。
     *
     * @param obj      对象
     * @param function 方法
     * @param <T>      对象的类型
     * @param <R>      方法的返回类型
     * @return 方法返回值 或 null
     */
    public static <T, R> R nullSafeInvoke(T obj, Function<T, R> function) {
        return (obj != null) ? function.apply(obj) : null;
    }

    /**
     * 如果对象不为 null，则将 obj 作为参数调用 function；否则将 defaultObj作为参数调用 function。
     *
     * @param obj      对象
     * @param function 方法
     * @param <T>      对象的类型
     * @param <R>      方法的返回类型
     * @return 方法返回值 或 null
     */
    public static <T, R> R nullSafeInvoke(T obj, T defaultObj, Function<T, R> function) {
        return (obj != null) ? function.apply(obj) : function.apply(defaultObj);
    }

}
